package com.eliza.vertx.library.dataType

import com.eliza.vertx.library.domain.User
import io.vertx.core.json.JsonArray
import io.vertx.core.json.JsonObject


/*-*- coding:utf-8 -*-
 * @Author  : debi
 * @Time    : 2/1/22
 * @Software: IntelliJ IDEA
 */
class ToJson {
    fun strToJson() {
        val jsonString = "{\"name\":\"yitian\",\"age\":25}"
        val jsonObject = JsonObject(jsonString)
        println(jsonObject)
    }

    fun mapToJson() {
        val map: MutableMap<String, Any> = HashMap()
        map["name"] = "yitian"
        map["age"] = 25
        val jsonObject2 = JsonObject(map)
        println(jsonObject2)
    }

    fun streamToJson() {
        var js = JsonObject().apply {
            put("name", "lilei").put("age", 25)
        }
        println(js)
    }

    fun getString() {
        var js = JsonObject().apply {
            put("name", "lilei").put("age", 25)
        }
        println(js.getString("name"))
    }
//    Json对象也可以和Java实体类之间通过mapTo和mapFrom互转。

    fun objTOJson(user: User) {
        val js = JsonObject.mapFrom(user)
        println(js.encode())
        val r = js.mapTo(User::class.java)
        println(r.toString())
    }

    //      JSON数组  如果要创建Json数组，使用JsonArray类。它的使用方法和JsonObject类似
    fun toJsonArray() {
        val jsonArray = JsonArray()
        jsonArray.add("yitian").add(25).add(true)
        println(jsonArray)
        println(jsonArray.encode())


        //获取Json数组的元素
        val name = jsonArray.getString(0)
        val age = jsonArray.getInteger(1)
        System.out.printf("name:%s,age:%d", name, age)
    }
}